﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

#pragma once

#include "GcmpModelInterface.h"
#include "IObject.h"

namespace gcmp
{
    class IElement;

    // 被链接Element的相关信息
    struct GCMP_MODEL_INTERFACE_EXPORT LinkedElementInformation
    {
        Int64 ElementId; ///< Element的Id
        std::string StandardCode; ///< 标准码字符串
        std::string Category; ///< Element的类别

        LinkedElementInformation()
            : ElementId(-1)
            , StandardCode("")
            , Category("")
        {}

        LinkedElementInformation(
            Int64 elementId,
            const std::string& standardCode,
            const std::string& category
        ) : ElementId(elementId)
            , StandardCode(standardCode)
            , Category(category)
        {}
    };

    /// \brief 元素按需加载时，用于过滤掉不需要加载的元素
    ///
    /// 跨专业链接时，使用该接口对远程下载的数据进行过滤，过滤掉不需要加载的数据
    class GCMP_MODEL_INTERFACE_EXPORT ILinkDatasetElementFilter : public IObject
    {
        DEFINE_CAST_DERIVED(gcmp::ILinkDatasetElementFilter, gcmp::IObject)
    public:
        /// \brief 判断元素是否通过过滤器
        /// \return true 通过，false 不通过
        virtual bool PassesFilter(const LinkedElementInformation& elementInfo) const = 0;

    public:
        virtual ~ILinkDatasetElementFilter();
    };
}

